package ar.com.larreta.entidades;

import java.util.Iterator;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;

import org.hibernate.annotations.Where;

//FIXME: Para poder utilizar esta clase hay que realizar el mapeo con annotation 
public class PersonaLocalizable {

	private Set<Direccion> direcciones;
	private Set<Telefono> telefonos;
	private Set<Email> emails;
	
	@OneToMany (mappedBy="persona", fetch=FetchType.LAZY, cascade=CascadeType.ALL)
	// Solamente trae los que no fueron borrados logicamente
	@Where(clause="fechaEliminacion IS NULL")
	public Set<Direccion> getDirecciones() {
		return direcciones;
	}
	
	public void setDirecciones(Set<Direccion> direcciones) {
		if (direcciones!=null){
			Iterator<Direccion> it = direcciones.iterator();
			while (it.hasNext()) {
				Direccion direccion = (Direccion) it.next();
				direccion.setPersona(this);
			}
		}
		this.direcciones = direcciones;
	}
	
	@OneToMany (mappedBy="persona", fetch=FetchType.LAZY, cascade=CascadeType.ALL)
	public Set<Telefono> getTelefonos() {
		return telefonos;
	}
	
	public void setTelefonos(Set<Telefono> telefonos) {
		if (telefonos!=null){
			Iterator<Telefono> it = telefonos.iterator();
			while (it.hasNext()) {
				Telefono telefono = (Telefono) it.next();
				telefono.setPersona(this);
			}
		}
		this.telefonos = telefonos;
	}

	@OneToMany (mappedBy="persona", fetch=FetchType.LAZY, cascade=CascadeType.ALL)
	public Set<Email> getEmails() {
		return emails;
	}

	public void setEmails(Set<Email> emails) {
		if (emails!=null){
			Iterator<Email> it = emails.iterator();
			while (it.hasNext()) {
				Email email = (Email) it.next();
				email.setPersona(this);
			}
		}
		this.emails = emails;
	}
	
}
